package com.zenithmind.version.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zenithmind.version.pojo.domain.Branch;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 分支Mapper接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Mapper
public interface BranchMapper extends BaseMapper<Branch> {

    /**
     * 查询仓库的分支列表
     * 
     * @param repositoryId 仓库ID
     * @param status 分支状态
     * @return 分支列表
     */
    List<Branch> selectByRepositoryId(@Param("repositoryId") String repositoryId,
                                     @Param("status") Integer status);

    /**
     * 根据仓库ID和分支名称查询分支
     * 
     * @param repositoryId 仓库ID
     * @param name 分支名称
     * @return 分支
     */
    Branch selectByRepositoryIdAndName(@Param("repositoryId") String repositoryId,
                                      @Param("name") String name);

    /**
     * 更新分支的最新提交信息
     * 
     * @param branchId 分支ID
     * @param commitId 提交ID
     * @param commitHash 提交哈希
     * @param commitMessage 提交消息
     * @param commitAuthor 提交作者
     * @return 更新行数
     */
    int updateLatestCommit(@Param("branchId") String branchId,
                          @Param("commitId") String commitId,
                          @Param("commitHash") String commitHash,
                          @Param("commitMessage") String commitMessage,
                          @Param("commitAuthor") String commitAuthor);

    /**
     * 更新分支统计信息
     * 
     * @param branchId 分支ID
     * @param commitCount 提交数量
     * @param aheadCount 领先提交数
     * @param behindCount 落后提交数
     * @return 更新行数
     */
    int updateStatistics(@Param("branchId") String branchId,
                        @Param("commitCount") Integer commitCount,
                        @Param("aheadCount") Integer aheadCount,
                        @Param("behindCount") Integer behindCount);

    /**
     * 查询活跃分支列表
     * 
     * @param repositoryId 仓库ID
     * @param limit 限制数量
     * @return 分支列表
     */
    List<Branch> selectActiveBranches(@Param("repositoryId") String repositoryId,
                                     @Param("limit") Integer limit);

    /**
     * 查询过期分支列表
     * 
     * @param repositoryId 仓库ID
     * @param days 天数
     * @return 分支列表
     */
    List<Branch> selectStaleBranches(@Param("repositoryId") String repositoryId,
                                    @Param("days") Integer days);
}
